#include<iostream>

#include<vector>

using namespace std;



struct ListNode

{

    int val;

    ListNode* next;

    ListNode() : val(0), next(NULL) {}

    ListNode(int x) : val(x), next(NULL) {}

    ListNode(int x, ListNode* next) : val(x), next(next) {}

};

class Solution {

public:

    ListNode* swapPairs(ListNode* head) {
        if (!head || !head->next) return head;
        ListNode ret, * lhs = &ret, * rhs = head;
        while (rhs && rhs->next)
        {
            ListNode* next = rhs->next;
            lhs->next = next;
            rhs->next = next->next;
            next->next = rhs;
            lhs = rhs;
            rhs = rhs->next;
        }
        return ret.next;
    }
};

ListNode* createByTail()

{

    ListNode* head;

    ListNode* p1, * p2{};

    int n = 0, num;

    int len;

    cin >> len;

    head = NULL;

    while (n<len && cin >> num)

    {

        p1 = new ListNode(num);

        n = n + 1;

        if (n == 1)

            head = p1;

        else

            p2->next = p1;

        p2 = p1;

    }

    return head;

}

void  displayLink(ListNode* head)

{

    ListNode* p;

    p = head;

    cout << "head-->";

    while (p != NULL)

    {

        cout << p->val << "-->";

        p = p->next;

    }

    cout << "tail\n";

}

int main()

{

    ListNode* head = createByTail();

    head = Solution().swapPairs(head);

    displayLink(head);

    return 0;

}